/*
 * MIT License
 *
 * Copyright (c) 2023 北京凯特伟业科技有限公司
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package com.je.bpm.model.process;

import com.je.bpm.model.process.payloads.ProcessModelDeletePayload;
import com.je.bpm.model.process.payloads.ProcessModelDeployPayload;
import com.je.bpm.model.process.payloads.ProcessModelGetPayload;
import com.je.bpm.model.process.payloads.SaveOrUpdateProcessModelPayload;
import com.je.bpm.model.process.results.ProcessModelResult;
import com.je.bpm.runtime.process.operator.ProcessModelDeleteOperator;
import com.je.bpm.runtime.process.operator.ProcessModelDeployOperator;
import com.je.bpm.runtime.process.operator.ProcessModelGetOperator;
import com.je.bpm.runtime.process.operator.ProcessModelSaveOperator;
import com.je.bpm.runtime.shared.operator.validator.PayloadValidErrorException;

public class ModelOperatorServiceImpl implements ModelOperatorService {

    private ProcessModelSaveOperator processModelSaveOperator;
    private ProcessModelDeployOperator deployOperator;
    private ProcessModelGetOperator processModelGetOperator;
    private ProcessModelDeleteOperator processModelDeleteOperator;

    public ModelOperatorServiceImpl(ProcessModelSaveOperator processModelSaveOperator, ProcessModelDeployOperator deployOperator,
                                    ProcessModelGetOperator processModelGetOperator, ProcessModelDeleteOperator processModelDeleteOperator) {
        this.processModelSaveOperator = processModelSaveOperator;
        this.deployOperator = deployOperator;
        this.processModelGetOperator = processModelGetOperator;
        this.processModelDeleteOperator = processModelDeleteOperator;
    }


    @Override
    public ProcessModelResult saveModel(String modelId, String metaInfo, String funcCode) {
        try {
            return processModelSaveOperator.operate(SaveOrUpdateProcessModelPayload.build().setFuncCode(funcCode).setMetaInfo(metaInfo).setModelId(modelId));
        } catch (PayloadValidErrorException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void modelDeploy(String modelId) {
        try {
            deployOperator.operate(ProcessModelDeployPayload.build().setModelId(modelId));
        } catch (PayloadValidErrorException e) {
            e.printStackTrace();
        }
    }

    @Override
    public ProcessModelResult getModel(String modelId) {
        try {
            return processModelGetOperator.operate(ProcessModelGetPayload.build().setModelId(modelId));
        } catch (PayloadValidErrorException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public void deleteModel(String modelId) {
        try {
            processModelDeleteOperator.operate(ProcessModelDeletePayload.build().setModelId(modelId));
        } catch (PayloadValidErrorException e) {
            e.printStackTrace();
        }
    }




}
